容器同城双活数据中心最佳实践
1前言
2延展集群
3容器对接
CSI iSCSI Driver配置过程
1.k8s平台开启快照、扩容、克隆、raw功能
1BlockVolume:开启raw卷功能
2CSIBlockVolume:开启raw卷功能
3VolumeSnapshotDataSource:开启快照功能
4ExpandCSIVolumes:开启扩容功能
5ExpandInUsePersistentVolumes:开启在线扩容功能
6VolumePVCDataSource:开启克隆功能(k8s 1.15.0+版本支持)
使用rancher对接时,需要在rancher管理界面配置kube-apiserver、kube-controller、kubelet三个服务,上一步中提到的参数。
2.Secret配置与创建
此功能用于保存SDS管理用户的用户名与密码,提供给CSI Driver使用。
3.AccessPath创建
1# vi cr-ap.yaml
2apiVersion: "sds.xsky.com/v1"
3kind: AccessPath
4metadata:
5 name: my-ap #kubernete显示的资源名称
6spec:
7 name: myap #SDS存储上AccessPath名称
8 type: Kubernetes #accesspath类型,默认为Kubernetes
9 cluster_info:
10 xmsServers: 10.252.90.39 #SDS集群管理节点IP地址,可配置多个,逗号隔开
11 secret_name: test-secret #SDS集群secret
12secret_namespace: default #secret所属命名空间
13 gateway: vm39,vm40,vm41 #配置块网关hostname
14 vip_group: #配置vip
15 preempt: false #optional #vip是否回切
16 vips: #如不需要vip,请配置为vips: [],并使用#号注释下面三行
17 - vip: 10.252.90.100 #vip ip
18 mask: 24 #vip子网
19 default_gateway: vm39 #vip创建节点
4.StorageClass配置与创建
描述如何配置StorageClass,及参数解释、定义一个后端存储。
1apiVersion: storage.k8s.io/v1
2kind: StorageClass
3metadata:
4 name: my-sc # StorageClass的名称
5parameters:
6 accessPaths: my-ap # 上一步中创建的AccessPath名称
7 fsType: ext4 # 文件系统格式。支持xfs,ext4,ext3
8 pool: poolB # 存储池名称
9 xmsServers: 10.252.3.179,10.252.3.180,10.252.3.181 # SDS管理节点管理IP,建议配置3个,以逗号隔开,csi iscsi driver顺序使用ip访问
10 csi.storage.k8s.io/provisioner-secret-name: test-secret # secret名称
11 csi.storage.k8s.io/provisioner-secret-namespace: default # secret命名空间
12provisioner: iscsi.csi.xsky.com # 默认为iscsi.csi.xsky.com
13reclaimPolicy: Delete
14allowVolumeExpansion: true # 是否允许卷扩容。true为允许,false为不允许
15mountOptions:
16 - _netdev # 添加mount参数,使用iscsi协议时,需要把挂载的块设备标识为网络设备。
5.PVC配置与创建
PVC资源,依赖storageclass,用于定义及自动创建一个后端卷。
1apiVersion: v1
2kind: PersistentVolumeClaim
3metadata:
4 name: my-pvc #name:pvc名称
5 namespace: default #此pvc安装在哪个命名空间
6spec:
7 volumeMode: Filesystem #Filesystem:以文件系统挂载,文件系统格式在strogeclass定义
8 #Block:以裸卷方式挂载
9 storageClassName: my-sc
10 accessModes:
11 - ReadOnlyMany #ReadWriteOnce:只允许本节点挂载
12 #ReadOnlyMany:允许多节点以只读方式挂载,pod中挂载卷需要配置成只读。
13 #ReadWriteMany:允许多节点以读写方式挂载(iscsi不支持,NFS支持)
14 resources:
15 requests:
16 storage: 20Gi
6.POD配置与创建
Pod是k8s基本资源,Pod中可以跑一个或多个容器,也可以挂载本地或后端存储卷。
1apiVersion: v1
2kind: Pod
3metadata:
4 name: my-pod
5spec:
6 containers:
7 - name: web-server
8 image: nginx
9 volumeMounts: #挂载文件系统,定义pvc格式化成文件系统形式挂载到pod内(对应PVC中的volumeMode: Filesystem)
10 - name: pvc-1 #关联volumes的名称
11 mountPath: /var/lib/www/html #指定容器中挂载点
12 readOnly: false #readOnly:卷是否只读。true为只读,false为读写,在下面卷上定义也可以
13
14 # volumeDevices: #挂载裸设备,定义pvc以裸设备形式挂载到pod内(对应PVC中的volumeMode: Block)
15 # - devicePath: /dev/xda #绑定到容器盘符
16 # name: nginx-storage-block #关联卷的名称
17
18 volumes: #定义卷信息,指定为pvc卷
19 - name: pvc-1
20 persistentVolumeClaim:
21 claimName: my-pvc #指定PVC
22 readOnly: false
7.VolumeSnapshotClass配置与创建
此资源用于定义快照。
2kind: VolumeSnapshotClass
3metadata:
4 name: csi-hostpath-snapclass # VolumeSnapshotClass名称
5parameters:
6 flatten: "true" # restore时是否断链,true为断链,false为不断链
7 use: "true" # 是否允许restore,true为允许,false为不允许
8snapshotter: iscsi.csi.xsky.com
9deletionPolicy: Delete # Retain:保留后端快照 Delete:删除后端快照
CSI NFS Driver配置过程
1.NFS创建
使用chrome浏览器登录SDS dashboard,分别创建文件客户端&客户端组、文件网关组、文件系统,添加NFS共享 。
2.StorageClass 配置与创建
1apiVersion: storage.k8s.io/v1
2kind: StorageClass
3metadata:
4 name: csi-nfs-sc
5provisioner: com.nfs.csi.xsky
6parameters:
7 xmsServers: 10.252.3.179,10.252.3.180,10.252.3.181 # SDS管理节点管理IP,建议配置3个,以逗号隔开
8 user: admin # SDS管理节点用户名
9 password: admin # SDS管理节点密码
10shares: 192.168.120.123:/sdsfs/k8s-nfs/ # NFS共享地址,配置多个以逗号隔开
11 clientGroupName: "k8s-cluster" # 客户端名称,删除此字段或者字段值为空表示公开共享
12reclaimPolicy: Delete # 删除策略
13mountOptions:
14- vers=3 # vers:支持v3,v4。默认使用v3
3.PVC 配置与创建
1apiVersion: v1
2kind: PersistentVolumeClaim
3metadata:
4 name: csi-nfs-pvc # PVC名称
5spec:
6 accessModes:
7 - ReadWriteOnce # 访问模式
8 # ReadWriteOnce:只允许单节点挂载
9 # ReadOnlyMany:允许多节点以只读方式挂载,pod中挂载卷需要配置成只读。
10 # ReadWriteMany:允许多节点以读写方式挂载(iscsi不支持,NFS支持)
11 resources:
12 requests:
13 storage: 5Gi
14 storageClassName: csi-nfs-sc
4.pod 配置与创建
1apiVersion: v1
2kind: Pod
3metadata:
4 name: csi-nfs-demopod
5spec:
6 containers:
7 - name: web-server
8 image: nginx
9 volumeMounts:
10 - name: mypvc # 本配置文件定义的卷名称
11 mountPath: /var/lib/www/html # 挂载到容器中的目录
12 volumes:
13 - name: mypvc # 本配置文件定义的卷名称
14 persistentVolumeClaim:
15 claimName: csi-nfs-pvc # pvc名称
16 readOnly: false # true为只读,false为读写
4容灾恢复
当XSKY的延展集群用于K8s容器集群容灾,如何进行pvc恢复?
NFS 对接,网关组需要添加两个中心网关节点。VIP运行在主中心节点。
iSCSI对接,AP需要关联两个中心网关节点。
1# kubectl get sc iscsi-sc -oyaml > sc.yaml
2# kubectl get pv pvname -oyaml > pv.yaml
3# kubectl get configmaps csi-iscsi-vid-pvname -oyaml > pv-configmaps.yaml
4# kubectl get pvc pvcname -oyaml > pvc.yaml
5# kubectl get pod podname -oyaml > pod.yaml
6# kubectl get secret secretname -oyaml > secret.yaml #iscsi对接需要用到拷贝secret
1# vim nfs-pv.yaml
2apiVersion: v1
3kind: PersistentVolume
4 pv.kubernetes.io/provisioned-by: com.nfs.csi.xsky
5 creationTimestamp: "2020-05-12T09:41:07Z"
6 finalizers:
7 - kubernetes.io/pv-protection
8 - external-attacher/com-nfs-csi-xsky
9 name: pvc-a5ff70ef-9434-11ea-a29c-fa8f374b5500
10 resourceVersion: "64802021"
11 selfLink: /api/v1/persistentvolumes/pvc-a5ff70ef-9434-11ea-a29c-fa8f374b5500
12 #uid: b455608e-9434-11ea-a29c-fa8f374b5500
13spec:
14 accessModes:
15 - ReadWriteMany
16 capacity:
17 storage: 5Gi
18 #claimRef:
19 # apiVersion: v1
20 # kind: PersistentVolumeClaim
21 # name: csi-nfs-pvc
22 # namespace: default
23 # resourceVersion: "64801647"
24 # uid: a5ff70ef-9434-11ea-a29c-fa8f374b5500
25 csi:
26 driver: com.nfs.csi.xsky
27 fsType: ext4
28 volumeAttributes:
29 password: admin
30 shares: 192.168.120.250:/sdsfs/csi-fs-1/
31 storage.kubernetes.io/csiProvisionerIdentity: 1589276173990-8081-com.nfs.csi.xsky
32 user: admin
33 volumeInfo: '{"id":0,"name":"pvc-a5ff70ef-9434-11ea-a29c-fa8f374b5500","sc":{"id":0
34,"name":"","xmsServers":"10.252.90.60,10.252.90.101","user":"admin","password":"admin","client_group_name":"","shares":["192.168.120.250:/sdsfs/csi-fs-1/"]},"size":5368709120,"shares":null,"folder_id":11,"quota_tree_id":6,"gateway_group_id":2,"full_share_path":"192.168.120.250:/sdsfs/csi-fs-1/pvc-a5ff70ef-9434-11ea-a29c-fa8f374b5500","share_id":0,"client_group_id":0}' xmsServers: 10.252.90.60,10.252.90.101
35 volumeHandle: csi-nfs-vid-pvc-a5ff70ef-9434-11ea-a29c-fa8f374b5500
36 mountOptions:
37 - vers=3
38 persistentVolumeReclaimPolicy: Retain
39 storageClassName: csi-nfs-sc
40 volumeMode: Filesystem
41status:
42 phase: Bound
备k8s集群恢复sc,pv,pvc,pod。
1# kubectl create -f sc.yaml
2# kubectl create -f pv.yaml
3# kubectl create -f configmaps.yaml
4# kubectl create -f pvc.yaml
5# kubectl create -f pod.yaml
到此,pvc,pod恢复完成。
5成功案例—— 马上消费金融
提供一套XSKY延展集群部署方案,共12节点,满足马上消费金融存储基础架构部署要求,同时可以配合上层容器、MySQL数据库实现业务平台层高可用建设。
两中心使用两个延展池,每个k8s集群使用本地为主pg pool。
使用csi iscsi driver动态对接k8s,提供块存储卷。
访问路径关联两中心块网关,实现机房容灾。
块网关配置VIP权重,优先机房内节点切换。
提供块存储卷,较好读写性能。
动态供应块存储卷,提供卷扩容、快照、clone、raw高级功能。
访问路径VIP切换约10秒。
XSKY星辰天合的容器双活解决方案,IO面通过独有的延展集群技术,保证两个数据中心的一致性,并且引入仲裁机制,保障故障的可靠切换。在管理面,星辰天合通过和Kubernetes开源社区和各个容器平台厂商合作,利用K8s的开放性,利用现成的开源组件,实现容器层面和管理面的双活。目前,星辰天合的同城容器双活数据中心方案已经在多个客户生产环境中部署,帮助企业全面向微服务化转型,提供系统的敏捷性,更好应对业务变化带来的挑战。
END
扫码联系
售前专家
往期推荐